#ifndef COMMAND_DRAFT_TOOLS_H_H_h_h
#define COMMAND_DRAFT_TOOLS_H_H_h_h
#include "Command.h"
#include "../AVIRecordQthread.h"
class ToolsCommand;
class CK3dEntity;
class ToolsCreator;
class DraftTool;
namespace App
{
   class DocumentObject;
}

class ToolsCommand : public Command
{
public:
	ToolsCommand(const char* cname);

public:
	const char* className() const
	{ return "ToolsCommand"; }
	virtual void activated(int iMsg){}
	virtual bool isActive(){return true;}

//protected:

	virtual	void finish(){}

	virtual void action(){}

	virtual	void Proceed(){}

	virtual	void numericInput(){}

	void activateTools(const char*, App::DocumentObject* ent = NULL)const;
	void deactivateTools(const char*)const;


protected:

	//ToolsCreator* m_Tc;
	DraftTool* m_DraftTool;
	

};

 class DraftTool
 {
 public:
 	DraftTool(){}
 	~DraftTool(){}	
 public:
 	bool isActive();
 	void activated(const char* tn);
 	void finish();
 
 };

  class ToolsCreator
  {
  public:
  	ToolsCreator(DraftTool* dt);


  public:
	  void activated(const char* tname = "");

  private:

	  DraftTool* mdt;
  };


class ToolsMove : public ToolsCommand
{
public:
	ToolsMove();
   virtual ~ToolsMove();
	const char* className() const
	{ return "ToolsMove"; }

public:

	void activated(int iMsg);
	bool isActive();
	void Proceed();
	void finish();
	void move();
	void action();
	void numericInput();
};
class ToolsRotate : public ToolsCommand
{
public:
	ToolsRotate();
	virtual ~ToolsRotate(){}

	const char* className() const
	{ return "ToolsRotate"; }

public:

	void activated(int iMsg);
	bool isActive();

	void Proceed();
	void finish();
	void action();
	void numericInput();

};

class ToolsScale : public ToolsCommand
{
public:
	ToolsScale();
	virtual ~ToolsScale(){}

	const char* className() const
	{ return "ToolsScale"; }

public:

	void activated(int iMsg);
	bool isActive();

	void Proceed();
	void finish();
	void action();
	void numericInput();

};

/************************************************************************/
/*   The Line  command definition                                                                   */
/************************************************************************/

class ToolsLine : public ToolsCommand
{
public:
	ToolsLine(/*ToolsCreator* tc*/);
	virtual ~ToolsLine();

	const char* className() const
	{ return "ToolsLine"; }

public:

	void activated(int iMsg);
	void action();

protected:
	ToolsCreator* mtc;
	App::DocumentObject* pObject;

	bool isWire;

};

class ToolsWire : public ToolsCommand
{
public:
	ToolsWire();

	const char* className() const
	{ return "ToolsWire"; }
public:
	void activated(int iMsg);

};

class ToolsBSline : public ToolsCommand
{
public:
	ToolsBSline();

	const char* className() const
	{ return "ToolsBSline"; }

public:
	void activated(int iMsg);

};

class ToolsArc : public ToolsCommand
{
public:
	ToolsArc();

	const char* className() const
	{ return "ToolsArc"; }
public:
	void activated(int iMsg);
};

class ToolsCircle : public ToolsCommand
{
public:
	ToolsCircle();

	const char* className() const
	{ return "ToolsCircle"; }
public:
	void activated(int iMsg);
};

//////////////////////////////////////////////////////////////////////////

class ToolsDimension : public ToolsCommand
{
public:
	ToolsDimension();

	const char* className() const
	{ return "ToolsDimension"; }
public:
	void activated(int iMsg);
};

//////////////////////////////////////////////////////////////////////////

class ToolsPathCamera : public ToolsCommand
{
public:
	 ToolsPathCamera();
	 const char* className() const
	 { return "ToolsPathCamera"; }
public:
	void activated(int iMsg);
};

class ToolsFreeCamera : public ToolsCommand
{
public:
	ToolsFreeCamera();
	const char* className() const
	{ return "ToolsFreeCamera"; }
public:
	void activated(int iMsg);
};

//////////////////////////////////////////////////////////////////////////

class ToolsMacroRecord : public ToolsCommand
{
public:
	ToolsMacroRecord();
	const char* className()const
	{ return "ToolsMacroRecord"; }

public: 
	void activated(int iMsg);
};

class ToolsRecordExcute : public ToolsCommand
{
public:
	ToolsRecordExcute();
	const char* className()const
	{return "ToolsRecordExcute";}
public:
	void activated(int iMsg);
};

class ToolsRecordStop : public ToolsCommand
{
public:
	ToolsRecordStop();
	const char* className()const
	{ return "ToolsRecordStop";}

public:
	void activated(int iMsg);
};
#endif